package org.utn.ia.search.init;

import java.util.ArrayList;
import java.util.List;

import org.utn.ia.search.enumeration.TipoJugador;
import org.utn.ia.search.util.Utils;

public class Estado {
	private Jugador turnoActual;

	private int piedrasEnHoyoCero;
	private int piedrasEnHoyoUno;
	private int piedrasEnHoyoDos;
	private int piedrasEnHoyoTres;
	private int piedrasEnHoyoCuatro;
	private int piedrasEnHoyoCinco;
	private int piedrasEnHoyoSeis;
	private int piedrasEnHoyoSiete;
	private int piedrasEnHoyoOcho;
	private int piedrasEnHoyoNueve;
	private int piedrasEnHoyoDiez;
	private int piedrasEnHoyoOnce;
	private int piedrasEnHoyoDoce;
	private int piedrasEnHoyoTrece;

	/*
	 * hoyo cero es la "casa" del jugador PC
	 */
	public int getPiedrasEnHoyoCero() {
		return piedrasEnHoyoCero;
	}

	public void setPiedrasEnHoyoCero(int piedrasEnHoyoCero) {
		this.piedrasEnHoyoCero = piedrasEnHoyoCero;
	}

	public int getPiedrasEnHoyoDos() {
		return piedrasEnHoyoDos;
	}

	public void setPiedrasEnHoyoDos(int piedrasEnHoyoDos) {
		this.piedrasEnHoyoDos = piedrasEnHoyoDos;
	}

	public int getPiedrasEnHoyoTres() {
		return piedrasEnHoyoTres;
	}

	public void setPiedrasEnHoyoTres(int piedrasEnHoyoTres) {
		this.piedrasEnHoyoTres = piedrasEnHoyoTres;
	}

	public int getPiedrasEnHoyoCuatro() {
		return piedrasEnHoyoCuatro;
	}

	public void setPiedrasEnHoyoCuatro(int piedrasEnHoyoCuatro) {
		this.piedrasEnHoyoCuatro = piedrasEnHoyoCuatro;
	}

	public int getPiedrasEnHoyoCinco() {
		return piedrasEnHoyoCinco;
	}

	public void setPiedrasEnHoyoCinco(int piedrasEnHoyoCinco) {
		this.piedrasEnHoyoCinco = piedrasEnHoyoCinco;
	}

	public int getPiedrasEnHoyoSeis() {
		return piedrasEnHoyoSeis;
	}

	public void setPiedrasEnHoyoSeis(int piedrasEnHoyoSeis) {
		this.piedrasEnHoyoSeis = piedrasEnHoyoSeis;
	}

	public int getPiedrasEnHoyoSiete() {
		return piedrasEnHoyoSiete;
	}

	public void setPiedrasEnHoyoSiete(int piedrasEnHoyoSiete) {
		this.piedrasEnHoyoSiete = piedrasEnHoyoSiete;
	}

	public int getPiedrasEnHoyoOcho() {
		return piedrasEnHoyoOcho;
	}

	public void setPiedrasEnHoyoOcho(int piedrasEnHoyoOcho) {
		this.piedrasEnHoyoOcho = piedrasEnHoyoOcho;
	}

	public int getPiedrasEnHoyoNueve() {
		return piedrasEnHoyoNueve;
	}

	public void setPiedrasEnHoyoNueve(int piedrasEnHoyoNueve) {
		this.piedrasEnHoyoNueve = piedrasEnHoyoNueve;
	}

	public int getPiedrasEnHoyoDiez() {
		return piedrasEnHoyoDiez;
	}

	public void setPiedrasEnHoyoDiez(int piedrasEnHoyoDiez) {
		this.piedrasEnHoyoDiez = piedrasEnHoyoDiez;
	}

	public int getPiedrasEnHoyoOnce() {
		return piedrasEnHoyoOnce;
	}

	public void setPiedrasEnHoyoOnce(int piedrasEnHoyoOnce) {
		this.piedrasEnHoyoOnce = piedrasEnHoyoOnce;
	}

	public int getPiedrasEnHoyoDoce() {
		return piedrasEnHoyoDoce;
	}

	public void setPiedrasEnHoyoDoce(int piedrasEnHoyoDoce) {
		this.piedrasEnHoyoDoce = piedrasEnHoyoDoce;
	}

	public int getPiedrasEnHoyoTrece() {
		return piedrasEnHoyoTrece;
	}

	public void setPiedrasEnHoyoTrece(int piedrasEnHoyoTrece) {
		this.piedrasEnHoyoTrece = piedrasEnHoyoTrece;
	}

	/*
	 * se verifica que alguno de los dos jugadores
	 * no contengan piedras y el juego haya llegado
	 * a su estado final
	 */
	public boolean esFinal() {
		boolean esFinal = false;
		List<Integer> valoresJugadorPC = getValuesOfHoyos(TipoJugador.PC); 
		if(Utils.getSumHoyos(valoresJugadorPC) == 0){
			esFinal = true;
		}else{
			valoresJugadorPC = getValuesOfHoyos(TipoJugador.JUGADOR1); 
			if(Utils.getSumHoyos(valoresJugadorPC) == 0){
				esFinal = true;
			}
		}
		return esFinal;
	}

	public Jugador getTurnoActual() {
		return turnoActual;
	}

	public void setTurnoActual(Jugador turnoActual) {
		this.turnoActual = turnoActual;
	}
	
	public List<Integer> getValuesOfHoyos(TipoJugador tipo){
		List<Integer> result = new ArrayList<>();
		if(tipo == TipoJugador.PC){
			
			result.add(piedrasEnHoyoUno);
			result.add(piedrasEnHoyoDos);
			result.add(piedrasEnHoyoTres);
			result.add(piedrasEnHoyoCuatro);
			result.add(piedrasEnHoyoCinco);
			result.add(piedrasEnHoyoSeis);
			
		}else {
			result.add(piedrasEnHoyoOcho);
			result.add(piedrasEnHoyoNueve);
			result.add(piedrasEnHoyoDiez);
			result.add(piedrasEnHoyoOnce);
			result.add(piedrasEnHoyoDoce);
			result.add(piedrasEnHoyoTrece);
		}
		return result;
	}

}
